package com.kgc.ssm.controller;

import com.kgc.ssm.bean.Provider;
import com.kgc.ssm.constant.CommConstant;
import com.kgc.ssm.service.ProviderService;
import com.kgc.ssm.util.PageSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;

/**
 * Created On : 2022/9/14.
 * <p>
 * Author : zhukang
 * <p>
 * Description: 供应商操作
 */
@Controller
public class ProviderController {

    @Autowired
    private ProviderService providerService;

    /**
     * @author : zhukang
     * @date   : 2022/8/15
     * @param  : [request, response]
     * @return : void
     * @description : 查询供应商列表，带分页
     */
    @RequestMapping("/providerList")
    public String providerList(@RequestParam(required = false) String queryProCode,
                             @RequestParam(required = false) String queryProName,
                             @RequestParam(required = false, defaultValue = CommConstant.DEFAULT_INIT_PAGE_NO) Integer pageNo,
                             @RequestParam(required = false, defaultValue = CommConstant.DEFAULT_INIT_PAGE_SIZE) Integer pageSize,
                             Map<String, Object> map) {


        // 根据查询条件，查询总条数
        int totalCount = providerService.getProviderCountByCondition(queryProCode, queryProName);

        // 创建分页对象，封装参数
        PageSupport<List<Provider>> pageSupport = new PageSupport<>();
        pageSupport.setPageSize(pageSize);
        pageSupport.setTotalCount(totalCount);

        // 页码特殊处理
        if(pageNo < 1 || pageSupport.getTotalPage() == 0){
            pageNo = 1;
        } else if(pageNo > pageSupport.getTotalPage()){
            pageNo = pageSupport.getTotalPage();
        }

        // 设置当前页码
        pageSupport.setCurrPageNo(pageNo);

        // 查询所有的供应商详情列表，带分页
        List<Provider> providerListPage = providerService.getProviderListByCondition(queryProCode, queryProName, pageSupport.getCurrPageNo(), pageSupport.getPageSize());

        // 添加分页数据
        pageSupport.setData(providerListPage);

        // 分页对象
        map.put("pageSupport", pageSupport);

        // 查询条件回显，将原查询条件，放入作用域，页面重新获取
        map.put("queryProCode", queryProCode);
        map.put("queryProName", queryProName);

        // 内部转发到用户列表页面
        return "providerlist";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 删除供应商详情
     */
    @RequestMapping("/providerDel")
    public String providerDel(@RequestParam("id") Integer providerId) {

        // 调用业务接口，根据供应商编号，删除供应商详情
        providerService.delProviderById(Integer.valueOf(providerId));

        // 重定向到供应商列表页面
        return "redirect:/providerList";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 查看供应商详情
     */
    @RequestMapping("/toViewProvider")
    public String toViewProvider(@RequestParam("id") Integer providerId, Map<String, Object> map) {

        // 调用业务接口，根据供应商编号，查询供应商详情
        Provider provider = providerService.getProviderById(Integer.valueOf(providerId));

        // 将供应商详情对象，存入作用域中
        map.put("provider", provider);

        // 转发到到供应商详情页面
        return "providerview";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 跳转修改供应商详情页面
     */
    @RequestMapping("/toModProvider")
    public String toModProvider(@RequestParam("id") Integer providerId, Map<String, Object> map) {
        // 调用业务接口，根据供应商编号，查询供应商详情
        Provider provider = providerService.getProviderById(Integer.valueOf(providerId));

        // 将供应商详情对象，存入作用域中
        map.put("provider", provider);

        // 转发到到供应商详情页面
        return "providermodify";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 修改供应商详情
     */
    @RequestMapping("/providerMod")
    public String providerMod(Provider providerForm) {
        // 调用业务接口，修改供应商详情
        providerService.modProviderById(providerForm);

        // 重定向到供应商列表页面
        return "redirect:/providerList";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 查看供应商详情
     */
    @RequestMapping("/toProviderAdd")
    public String toProviderAdd(Map<String, Object> map) {

        // 转发到到供应商详情页面
        return "provideradd";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 增加供应商详情
     */
    @RequestMapping("/providerAdd")
    public String providerAdd(Provider providerForm, HttpSession session) {
        providerForm.setCreatedBy((Integer) session.getAttribute("userId"));

        // 调用业务接口，添加供应商详情
        providerService.addProviderInfo(providerForm);

        // 重定向到供应商列表页面
       return "redirect:/providerList";
    }
}
